/*
 * @Description: 函数的调用
 * @Author: zzj
 * @Date: 2021-09-08 20:46:20
 * @LastEditors: zzj
 * @LastEditTime: 2021-09-09 08:55:34
 */

/*
函数名(实参列表);
函数名.call(执行环境对象,实参列表);
函数名.apply(执行环境对象,实参列表数组);
函数名.bind(执行环境对象)(实参列表);
函数名.bind(执行环境对象,实参列表)();
函数没有重载的概念，两个函数的函数名相同即是同样一个函数
 */

var say = function(age){
    console.log(this,this.name,age)
  }
  var obj={
    name:'zs',
    say
  }
  say(10);
  //对象中维护函数的地址   对象--使用-->函数
  obj.say(20);  
  say.call(this,30);  
  say.call(obj,40);//调用指定函数名的函数，并且将obj赋值给该函数中的this  js中常用的  
  say.apply(obj,[50]);//调用指定函数名的函数，并且将obj赋值给该函数中的this    
  say.bind(obj)(60);  
  say.bind(obj,70)();  
  
  //对象中不维护函数的地址，还能使用函数  函数--回调-->对象
  function sayName(color1,color2){
    console.log(this.name+" color:"+color1+"\t"+this.age+" color:"+color2);
  }
  var p3={name:"ww",age:12};
  sayName.call(p3,null);
  sayName.apply(p3,null);
  sayName.call(p3,"red","green");//改变函数内部的this指向
  sayName.apply(p3,["red","green"]);